Gatlingでの負荷試験を、可能な限り1台で実施するための設定を試してみた

Gatlingでの負荷試験を、可能な限り1台で実施するための設定を試してみた

Clock Icon2024.10.28

こんにちは、ゲームソリューション部のsoraです。
今回は、Gatlingでの負荷試験を、可能な限り1台で実施するための設定を試してみたことについて書いていきます。

はじめに

GatlingサーバとしてEC2を使用します。
OSはAmazon Linux 2023を使用します。
「可能な限り1台で実施するため」であり、最大パフォーマンスを出すこととは、ずれる設定もあることはご了承ください。

OSの設定

エフェメラルポートの上限変更

Gatlingにて以下のエラーが出ることがありました。
j.n.ConnectException: connect(..) failed: Cannot assign requested address

Gatlingの仕組みとして、リクエストは一時ポート(エフェメラルポート)を使用して実行されます。
そのため、Gatlingで大量のリクエストを実行してエフェメラルポートを使い切ると上記エラーが出るため、エフェメラルポートの範囲を広げます。
範囲を広げても使い切ってしまう場合は、台数を増やすしかないかなと思います。

以下のコマンドにて、エフェメラルポートの範囲を変更します。

# 現在の設定確認(60999-32768=28231個)
$ cat /proc/sys/net/ipv4/ip_local_port_range
32768   65535

# confファイルの編集
$ sudo nano /etc/sysctl.conf
net.ipv4.ip_local_port_range = 1024 65535
# 設定の反映
$ sudo sysctl -p
net.ipv4.ip_local_port_range = 1024 65535
# 設定変更後の確認(65535-1024=64511個)
$ cat /proc/sys/net/ipv4/ip_local_port_range
1024    65535

ファイルディスクリプタのソフトリミットの変更

ファイルディスクリプタは、OSにてファイルや入出力するリソースを識別するために使用される識別子です。
こちらも上限に引っかかってエラーになることがあるため、上限を確認していきます。
確認してみたところ、今回のAmazon Linux 2023では、ハードリミットとソフトリミットが一致しており、ソフトリミットをこれ以上上げることはできないため、変更しませんでした。

$ ulimit -Hn
65535
$ ulimit -Sn
65535

Gatlingの設定

次にGatlingの設定も見ていきます。
Gatlingをインストール後、src/test/resources配下にgatling.confがあります。

この中で、コネクションを有効活用するためキープアライブを有効化します。
タイムアウト周りについて、タイムアウトエラーを避けることを重視して待っても良いのであれば長い時間で設定します。
パフォーマンスを最大限に引き出すためには、Coreのメモリ周りの設定を調整すれば良いかもしれません。

gatling.conf
socket {
    #connectTimeout = 10000                  # Timeout in millis for establishing a TCP socket
    #soKeepAlive = false                     # if TCP keepalive configured at OS level should be used
}
http {
    #pooledConnectionIdleTimeout = 60000     # Timeout in millis for a connection to stay idle in the pool
    #requestTimeout = 60000                  # Timeout in millis for performing an HTTP request
}

最後に

今回は、Gatlingでの負荷試験を、可能な限り1台で実施するための設定を試してみたことを記事にしました。
どなたかの参考になると幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.